package com.laker.autotest.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * 自定义配置
 */
@Configuration
@Data
@ConfigurationProperties(prefix = "easy")
public class EasyConfig {
    /**
     * 发件人邮箱
     */
    @Value("${spring.mail.username}")
    private String senderEmail;
    /**
     * 是否开启发送邮件，默认false
     */
    private boolean sendEmail = false;
    /**
     * 是否用自定义增强报告，默认false
     */
    private boolean enhancedReport = false;
    /**
     * 收件人邮箱
     */
    private String[] sendTo = new String[]{};

    /**
     * 浏览器名称 eg: chromium, firefox, webkit
     */
    private String browser = "chromium";

    private LaunchOptions launchOptions = new LaunchOptions();

    private ContextOptions contextOptions = new ContextOptions();

    private TraceOptions traceOptions = new TraceOptions();

    private RetryOptions retryOptions = new RetryOptions();

    @Data
    public static class LaunchOptions {
        /**
         * 是否开启无头模式，默认false
         */
        public boolean headless = false;
        /**
         * 等待浏览器实例启动的最长时间（以毫秒为单位）。 默认为 30000（30 秒）。 传递 0 以禁用超时。
         */
        public double timeout = 30_000;
        /**
         * 慢模式毫秒数，设置为0则关闭，默认0
         */
        public double slowMo = 200;

        /**
         * 浏览器通道 chrome, msedge ,默认不使用该值，
         * 如果用这个会直接使用的你机器上自己安装的浏览器
         */
        private String channel;

    }

    @Data
    public static class ContextOptions {
        /**
         * 设置全局默认超时时间。 默认为 30000（30秒）。
         */
        public double timeout = 30_000;
        /**
         * 浏览器窗口宽
         */
        public int viewportWidth = 1920;
        /**
         * 浏览器窗口高
         */
        public int viewportHeight = 1080;
        /**
         * 是否复用脚本录制的登录状态 默认不启用
         */
        public boolean loginState = false;

    }

    @Data
    public static class TraceOptions {
        /**
         * 是否开启错误截图，默认关闭
         */
        public boolean screenshotEnable = false;
        /**
         * 是否开启错误trace，默认开启
         */
        public boolean traceEnable = true;
        /**
         * 是否开启错误video，默认关闭
         */
        public boolean videoEnable = false;
    }

    @Data
    public static class RetryOptions {
        /**
         * 最大重试次数，默认3次。
         */
        public int maxRetryCount = 3;

    }

}
